package com.xyy.saas.payment.merchant.core.dto;

import com.xyy.saas.payment.util.AmountCastUtil;
import lombok.Builder;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicBoolean;

@Data
@Builder
public class QueryChannelClearVo {
    /**
     * 总行数
     */
    private String totalNum;
    /**
     * 本次返回行数
     */
    private String resultNum;
    /**
     * 结束标识
     * 0 否
     * 1 是
     */
    private String endFlag;
    /**
     * 清算结果
     */
    private List<QueryChannelClearItem> items;

    /**
     * 银行清分是否完成
     */
    public boolean isClearFinish() {
        if(items == null) {
            return false;
        }

        AtomicBoolean isClearFinish = new AtomicBoolean(true);

        // 需全部清分完成
        items.forEach(item -> {
            if(!"0".equals(item.getClearStatus())) {
                isClearFinish.set(false);
            }
        });

        return isClearFinish.get();
    }

    /**
     * 解析明细
     */
    public static List<QueryChannelClearItem> parseItems(List<Map<String, String>> param) {
        if(param == null) {
            return null;
        }

        List<QueryChannelClearItem> items = new ArrayList<>();

        for(Map<String, String> item : param) {
            items.add(QueryChannelClearItem.builder().
                    accountType(item.get("SubAcctType")).
                    reconcileStatus(item.get("ReconcileStatus")).
                    totalAmount(AmountCastUtil.castYuan2Fen(item.get("TotalAmt"))).
                    clearStatus(item.get("ClearingStatus")).
                    clearFinishDate(item.get("ClearingFinishDate")).
                    build());
        }

        return items;
    }
}

@Data
@Builder
class QueryChannelClearItem {
    /**
     * 账户类型
     * 7 在途子账户
     */
    public String accountType;
    /**
     * 对账状态
     * 0 成功
     * 1 失败
     */
    public String reconcileStatus;
    /**
     * 待清算总金额
     */
    public Integer totalAmount;
    /**
     * 清算状态
     * 0 成功
     * 1 失败
     * 2 异常
     * 3 待处理
     */
    public String clearStatus;
    /**
     * 清算完成时间
     * 20220101
     */
    public String clearFinishDate;
}
